#include <stdio.h>
#include <string.h>
#include "capteur.h"


void menu_capteur()
{
char chemin[]="capteur.txt";
char name[100],place[100];
int choix;
capteur c1;
strcpy(name,"0");
strcpy(place,"0");

printf("\n1:afficher capteurs");
printf("\n2:enregistrer_capteur");
printf("\n3:supprimer_capteur");
printf("\n4:chercher capteur par nom");
printf("\n5:chercher capteur par emplacement");
printf("\n6:afficher capteurs fonctionnels");
printf("\n7:afficher capteurs non fonctionnels");
printf("\n8:modifier_capteur");
printf("\ntaper autre chiffre pour quitter menu");
printf ("\ndonner votre choix\n");
scanf("%d",&choix);

switch (choix)
{
case 1: liste_capteur(c1);menu_capteur();

break;
case 2: ajouter_capteur (c1);menu_capteur();

break;
case 3: supprimer_capteur(&c1,name);menu_capteur();

break;
case 4: rechercher_capteur_nom(name);menu_capteur();

break;
case 5: rechercher_capteur_place(place);menu_capteur();

break;
case 6: afficher_capteurs_fonctionnels();menu_capteur();

break;
case 7: afficher_capteurs_non_fonctionnels();menu_capteur();

break;
case 8: modif_capteur();menu_capteur();

break;

default :printf("vous avez choisi de quitter \n"); 
       
}
}

void ajouter_capteur(capteur c)
{
char name[100],nom1[100],place[100];
int year,day,month,test1,test2,state,biss,a,b;

a=rechercher_capteur_nom(name);
b=rechercher_capteur_place(place);
if ((a==1)&&(b==1)) 
{printf("le nom et l'emplacement du capteur existent deja dans la base de données \n");}
else if (a==1 && b==0) printf("le nom du capteur existe deja dans la base de données \n");
else if (a==0 && b==1) printf("l'emplacement du capteur existe deja dans la base de données \n");
else {


char chemin[]="capteur.txt";
FILE *f;
f=fopen(chemin,"a");
if(f==NULL)
{
printf("\n Impossible d'ouvrir le fichier\n");
}

else
{

//nom
strcpy(c.nom,name);
//emplacement
strcpy(c.emplacement,place);

//etat
do{
printf(" donner etat du capteur(1 si fonctionnel,0 sinon) \n");
scanf("%d",&state);
}while (state!=0 && state!=1);
c.etat=state;
//day,year,month
//year
do{
printf("donner l'annee d'implementation du capteur \n");
scanf("%d",&year);
}while(year<1980||year>2050);
if (year%4==0) biss=1; else biss=0;
c.annee=year;
//month
do{
printf("donner  le mois associé \n");
scanf("%d",&month);
}while(month<=0||month>12);
c.mois=month;

//day
do{
printf("donner le jour associe \n");
scanf("%d",&day);
if (month==1)
{test1=1;test2=31;}
else if (month==2)
{if (biss==1)

{test1=1;test2=29;}
else if (biss==0) {test1=1;test2=28;}}
else if (month==3)
{test1=1;test2=31;}
else if (month==4)
{test1=1;test2=30;}
else if (month==5)
{test1=1;test2=31;}
else if (month==6)
{test1=1;test2=30;}
else if (month==7)
{test1=1;test2=31;}
else if (month==8)
{test1=1;test2=31;}
else if (month==9)
{test1=1;test2=30;}
else if (month==10)
{test1=1;test2=31;}
else if (month==11)
{test1=1;test2=30;}
else if (month==12)
{test1=1;test2=31;}

}while(day<test1||day>test2);
c.jour=day;

fprintf(f,"%s %d %s %d %d %d \n",c.nom,c.etat,c.emplacement,c.jour,c.mois,c.annee);
}


fclose(f);
}
}



void liste_capteur(capteur c )
{
char chemin[]="capteur.txt";

FILE *f;


f=fopen(chemin,"r");
if(f==NULL){
printf("\nImpossible\n");
}else{
while( fscanf(f,"%s %d %s %d %d %d ",c.nom,&c.etat,c.emplacement,&c.jour,&c.mois,&c.annee)
 != EOF)
{

printf("\n Nom : %s",c.nom);
printf("\n l'etat du capteur : %d",c.etat);
printf("\n l'emplacement du capteur : %s",c.emplacement);
printf("\n le jour d'installation: %d",c.jour);
printf("\n le mois d'installation %d",c.mois);
printf("\n l'année d'installation: %d\n",c.annee);

}
}
fclose(f);
}


void supprimer_capteur(capteur *c,char name[100])
{int a,t;
char name1[100];
FILE *f1,*f2;
char chemin[]="capteur.txt";
char temp[]="temp.txt";


f1=fopen(chemin,"r");
f2=fopen(temp,"w");
if(f1==NULL||f2==NULL)
printf("\n Impossible d'ouvrir le fichier \n");

else{
t=0;
if (strcmp(name,"0")==0)
{printf("\ndonner nom\n");
scanf("%s",name1);}
else strcpy(name1,name);
rewind(f1);


while(fscanf(f1,"%s %d %s %d %d %d ",c->nom,&c->etat,c->emplacement,&c->jour,&c->mois,&c->annee)!=EOF ){
 if(strcmp(c->nom,name1)==0){
t=1 ;printf("\ndone!\n");

break;}
}

if (t!=1)
printf("no match \n");

rewind(f1);

while (fscanf(f1,"%s %d %s %d %d %d ",c->nom,&c->etat,c->emplacement,&c->jour,&c->mois,&c->annee)!=EOF ){

    if (strcmp(c->nom,name1) != 0)
   fprintf (f2,"%s %d %s %d %d %d \n",c->nom,c->etat,c->emplacement,c->jour,c->mois,c->annee);
}
fclose(f1);
fclose(f2);
remove(chemin);
rename(temp,chemin);
}
}

int rechercher_capteur_nom(char name[100])

{capteur c;
int t;
char chemin[]="capteur.txt";
FILE *f;
t=0;
f=fopen(chemin,"r");
if (f==NULL) printf("\nimpossible\n");
else{

printf("\nsaisir nom\n");
scanf("%s",name);
while(fscanf(f,"%s %d %s %d %d %d ",c.nom,&c.etat,c.emplacement,&c.jour,&c.mois,&c.annee)!=EOF  )
{

if((strcmp(name,c.nom)==0)){

printf ("\nnom:%s \netat:%d \nemplacement:%s \njour:%d \nmois:%d \nannee:%d \n",c.nom,c.etat,c.emplacement,c.jour,c.mois,c.annee);t=1;}

}}
fclose(f);
if (t==0) 
printf("no match\n");
return(t);
}//end

int rechercher_capteur_place(char place[100])

{capteur c;
int t;
char chemin[]="capteur.txt";
FILE *f;
t=0;
f=fopen(chemin,"r");
if (f==NULL) printf("\nimpossible\n");
else{
if (strcmp(place,"0")==0)
{printf("\nsaisir l'emplacement\n");
scanf("%s",place);}
while(fscanf(f,"%s %d %s %d %d %d ",c.nom,&c.etat,c.emplacement,&c.jour,&c.mois,&c.annee)!=EOF  )
{

if((strcmp(place,c.emplacement)==0)){

printf ("\nnom:%s \netat:%d \nemplacement:%s \njour:%d \nmois:%d \nannee:%d \n",c.nom,c.etat,c.emplacement,c.jour,c.mois,c.annee);t=1;}


}}
fclose(f);
if (t==0) 
printf("no match\n");
return(t);
}//end



void modif_capteur()
{//o1
char place[100],name[100],place_test[100];
capteur c1,c;
int state,t,choix,b;
FILE *f;
char chemin[]="capteur.txt";
t=rechercher_capteur_nom(name);


if (t==1)
{//o2


f=fopen(chemin,"r");
if (f==NULL) printf("\nimpossible\n");
else{//o3
while(fscanf(f,"%s %d %s %d %d %d ",c.nom,&c.etat,c.emplacement,&c.jour,&c.mois,&c.annee)!=EOF  )
{//O4w

if(strcmp(name,c.nom)==0){//o5
strcpy(c1.nom,c.nom);
c1.jour=c.jour;
c1.mois=c.mois;
c1.annee=c.annee;
printf("voulez vous changer l'etat du capteur(1),l'emplacement(2),les 2(3),quitter(autre chiffre) \n");
scanf("%d",&choix);
switch (choix){//o6
case 1:strcpy(c1.emplacement,c.emplacement);
do{
printf(" donner etat du capteur(1 fonctionnel ou 0 sinon) \n");
scanf("%d",&state);
}while (state!=0 && state!=1);
c1.etat=state;

fclose(f);
supprimer_capteur (&c,c.nom);
f=fopen(chemin,"a");
if(f==NULL)

printf("\n Impossible d'ouvrir le fichier\n");


else
{fprintf(f,"%s %d %s %d %d %d \n",c1.nom,c1.etat,c1.emplacement,c1.jour,c1.mois,c1.annee);
fclose(f);}
break;
case 2:c1.etat=c.etat;
do{
printf("donner l'emplacement du capteur \n");
scanf("%s",place);
b=rechercher_capteur_place(place);
if (b==1) printf("emplacement deja occupe \n");
}while(b==1);
strcpy(c1.emplacement,place);
fclose(f);
supprimer_capteur (&c,c.nom);
f=fopen(chemin,"a");
if(f==NULL)

printf("\n Impossible d'ouvrir le fichier\n");


else
{fprintf(f,"%s %d  %s %d %d %d \n",c1.nom,c1.etat,c1.emplacement,c1.jour,c1.mois,c1.annee);
fclose(f);}
break;
case 3:do{
printf(" donner etat du capteur(1fonctionnel ou 0sinon) \n");
scanf("%d",&state);
}while (state!=0 && state!=1);
c1.etat=state;
do{
printf("donner l'emplacement du capteur \n");
scanf("%s",place);
b=rechercher_capteur_place(place);
if (b==1) printf("emplacement deja occupe \n");
}while(b==1);
strcpy(c1.emplacement,place);
fclose(f);
supprimer_capteur (&c,c.nom);
f=fopen(chemin,"a");
if(f==NULL)

printf("\n Impossible d'ouvrir le fichier\n");


else
{fprintf(f,"%s %d  %s %d %d %d \n",c1.nom,c1.etat,c1.emplacement,c1.jour,c1.mois,c1.annee);
fclose(f);}
break;
default:printf("vous avez choisi de quitter \n");fclose(f);
}//c6
}//c5
}//c4

}//c3
}//c2
}//c1


void afficher_capteurs_fonctionnels()
{capteur c;
int t;
char chemin[]="capteur.txt";
FILE *f;
t=0;
f=fopen(chemin,"r");
if (f==NULL) printf("\nimpossible\n");
else{


while(fscanf(f,"%s %d %s %d %d %d ",c.nom,&c.etat,c.emplacement,&c.jour,&c.mois,&c.annee)!=EOF  )
{

if(c.etat==1) {
printf ("\nnom:%s \netat:%d \nemplacement:%s \njour:%d \nmois:%d \nannee:%d \n",c.nom,c.etat,c.emplacement,c.jour,c.mois,c.annee);t=1;}

}}
fclose(f);
if (t==0) 
printf("no match\n");

}//end


void afficher_capteurs_non_fonctionnels()
{capteur c;
int t;
char chemin[]="capteur.txt";
FILE *f;
t=0;
f=fopen(chemin,"r");
if (f==NULL) printf("\nimpossible\n");
else{


while(fscanf(f,"%s %d %s %d %d %d ",c.nom,&c.etat,c.emplacement,&c.jour,&c.mois,&c.annee)!=EOF  )
{

if(c.etat==0) {
printf ("\nnom:%s \netat:%d \nemplacement:%s \njour:%d \nmois:%d \nannee:%d \n",c.nom,c.etat,c.emplacement,c.jour,c.mois,c.annee);t=1;}

}}
fclose(f);
if (t==0) 
printf("no match\n");

}//end













































